home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Wonky Flux Batch 2019 02
/
Wonky_Flux_Batch_2019-02.zip
/
Wonky Flux Batch 2019-02
/
057 - Algebra Workshop.dsk
/
XY.EQUATIONS.bas
< prev
Wrap
BASIC Source File
|
2019-02-17
|
8KB
|
245 lines
100 REM XY EQUATIONS
110 GOTO 2200
120 HOME
130 PRINT "FRACTIONS SUBROUTINES"
140 PRINT : PRINT "STARTING LOCATIONS:"
150 PRINT : PRINT "GCD : A,B<> 0 IN, GCD OUT:230"
160 PRINT : PRINT "REDUCE:NUM,DEN IN, NNUM,NDEN OUT:350"
170 PRINT : PRINT "MULTIPLY:N1/D1, N2/D2 IN, N3/D3 OUT:480"
180 PRINT : PRINT "ORDER: N1/D1,N2/D2 IN,"
190 PRINT : PRINT " MARK = -1,0,1 OUT:590"
200 PRINT : PRINT "SUM: N1/D1, N2/D2 IN, N3/D3 OUT : 720"
210 PRINT : PRINT "GETTER:NUM,DEN OUT:830"
220 PRINT : PRINT "LAST LINE: 1070": END
230 REM GCD SUBROUTINE:A,B IN,GCD OUT
240 REM SUBROUTINE ASSUMES B<>0
250 Q = INT(A/B): REM DIVIDE A BY B
260 R = A -Q *B: REM REMAINDER
270 IF R = 0 THEN 310: REM ALGORITHM FINISHED,GCD IS B
280 REM IF R <> 0 MUST DO ANOTHER DIVISION
290 REM NOW SET UP FOR NEXT DIVISION
300 A = B:B = R: GOTO 250
310 GCD = B
320 RETURN
330 REM SUBROUTINE FINISHED
340 REM
350 REM SUBROUTINE TO REDUCE FRACTION
360 REM USING GCD SUBROUTINE
370 REM NUM, DEN IN, NNUM,NDEN OUT
380 REM IF NUM = 0, SKIP GCD SUBRTN
390 IF NUM = 0 THEN NNUM = 0:NDEN = 1: RETURN
400 A = NUM:B = DEN
410 GOSUB 250: REM GCD SUBROUTINE
420 REM SUBROUTINE RETURNS GCD
430 REM NOW DIVIDE OUT BY GCD:
440 NNUM = NUM/GCD:NDEN = DEN/GCD
450 REM REDUCED FORM IS NNUM/NDEN
460 RETURN
470 REM
480 REM SUBROUTINE TO MULTIPLY FRACS
490 REM N1/D1 AND N2/D2 IN, N3/D3 OUT
500 REM
510 REM COMPUTE UNREDUCED PRODUCT NUM/DEN
520 NUM = N1 *N2
530 DEN = D1 *D2
540 GOSUB 350: REM REDUCE TO NNUM/NDEN
550 REM SET UP FOR RETURN
560 N3 = NNUM:D3 = NDEN
570 RETURN
580 REM
590 REM SUBROUTINE TO ORDER FRACTIONS
600 REM N1/D1 AND N2/D2 IN
610 REM RETURNS:
620 REM MARK=-1 IF N1/D1<N2/D2
630 REM MARK = 0 IF N1/D1=N2/D2
640 REM MARK=1 IF N1/D1>N2/D2
650 REM CROSS MULTIPLY:
660 A = N1 *D2:B = N2 *D1
670 IF A <B THEN MARK = -1
680 IF A = B THEN MARK = 0
690 IF A >B THEN MARK = 1
700 RETURN
710 REM
720 REM SUBROUTINE TO ADD FRACTIONS
730 REM N1/D1 AND N2/D2 IN,
740 REM SUM N3/D3 OUT
750 REM FORM UNREDUCED SUM:
760 NUM = N1 *D2 +N2 *D1
770 DEN = D1 *D2
780 IF NUM = 0 THEN N3 = 0:D3 = 1: GOTO 810: REM SKIP REDUCE
790 GOSUB 350: REM REDUCE TO NNUM/NDEN
800 N3 = NNUM:D3 = NDEN
810 RETURN
820 REM
830 REM SUBRTN TO READ FRAC FROM KYBD
840 REM SUBRTN EXPECTS STRING NUM/DEN
850 REM AND EXTRACTS NUM AND DEN
860 REM BEFORE ENTERING SBRTN, SET
870 REM VV$= SOME CONNECTING WORD
880 REM :PRINT : PRINT "PLEASE TYPE ";VV$;"FRACTION"
890 INPUT A$
900 REM SEARCH FOR "/" IN A$:
910 FOR K = 1 TO LEN(A$)
920 REM LOOK AT K TH CHARACTER OF A$
930 CHAR$ = MID$ (A$,K,1)
940 IF CHAR$ = "/" THEN 1010: REM FOUND "/"
950 NEXT : REM KEEP LOOKING FOR "/"
960 REM HERE, A$ HAS NO "/";ASSUME A$ IS INTEGER
970 NUM = VAL(A$): REM NUMERICAL VAL OF A$
980 DEN = 1
990 RETURN
1000 REM HERE, HAVE FOUND "/" AS K-TH CHAR OF A$
1010 NUM$ = LEFT$(A$,K -1)
1020 DEN$ = RIGHT$(A$, LEN(A$) -K)
1030 NUM = VAL(NUM$)
1040 DEN = VAL(DEN$)
1050 IF DEN = 0 THEN PRINT : PRINT "DENOMINATOR NOT ALLOWED TO BE ZERO.": GOTO 880
1060 RETURN
1070 REM
1080 REM SUBROUTINE TO GET EQUATIONS
1090 REM
1100 HOME
1110 VARS = 2
1120 PRINT : PRINT "HOW MANY EQUATIONS";: INPUT EQNS
1130 DIM N(EQNS,VARS +1),D(EQNS,VARS +1)
1140 FOR ROW = 1 TO EQNS
1150 HOME
1160 REM GET EQUATION "ROW":
1170 REM
1180 REM
1190 PRINT "TYPE IN A,B,C FOR EQUATION ";ROW
1200 PRINT
1210 PRINT "AX + BY = C"
1220 PRINT : PRINT "A = ";: GOSUB 830: REM FRAC GETTER
1230 N(ROW,1) = NUM:D(ROW,1) = DEN
1240 PRINT "B = ";: GOSUB 830: REM FRAC GETTER
1250 N(ROW,2) = NUM:D(ROW,2) = DEN
1260 PRINT "C = ";: GOSUB 830: REM FRAC GETTER
1270 N(ROW,3) = NUM:D(ROW,3) = DEN
1280 REM
1290 REM
1300 REM
1310 PRINT : PRINT "CHECK THE EQUATION": PRINT
1320 GOSUB 1410
1330 PRINT : PRINT "IS THIS CORRECT (Y OR N)";
1340 REM
1350 INPUT ANS$: IF ANS$ = "N" THEN HOME : GOTO 1180
1360 IF ANS$ < >"Y" THEN 1350
1370 NEXT ROW
1380 REM PRINT EQUATIONS:
1390 GOSUB 2450
1400 RETURN
1410 REM
1420 REM SUB TO PRINT EQUATION "ROW"
1430 REM
1440 FLAG = 0: REM SET = 1 WHEN FIRST NON-ZERO COEF IS FOUND
1450 PRINT ROW;") ";
1460 FOR COL = 1 TO VARS
1470 REM IF COEF = 0, DON'T PRINT
1480 IF N(ROW,COL) = 0 THEN PRINT SPC( 4): GOTO 1650: REM NEXT COL
1490 REM HERE, HAVE NON-ZERO COEF
1500 REM IF FLAG = 1, IT'S NOT THE FIRST NON-ZERO COEF
1510 REM PRINT "+" ONLY FOR POS COEFS
1520 REM AFTER THE FIRST
1530 IF FLAG = 1 AND N(ROW,COL) >0 THEN PRINT "+";
1540 FLAG = 1
1550 REM DON'T PRINT "1" DENOMS
1560 REM DON'T PRINT "1/1" COEFS
1570 IF D(ROW,COL) = 1 THEN IF N(ROW,COL) < >1 THEN PRINT N(ROW,COL);
1580 REM PUT "()" AROUND POS FRACS
1590 IF D(ROW,COL) < >1 AND N(ROW,COL) >0 THEN PRINT "(";N(ROW,COL);"/";D(ROW,COL);")";
1600 REM DON'T PUT "()" AROUND NEG FRACS
1610 IF D(ROW,COL) < >1 AND N(ROW,COL) <0 THEN PRINT N(ROW,COL);"/";D(ROW,COL);
1620 REM PRINT VARIABLE NAME:
1630 IF COL = 1 THEN PRINT "X";
1640 IF COL = 2 THEN PRINT "Y";
1650 NEXT COL
1660 REM HERE, HAVE DEALT WITH ALL X'S
1670 REM IF FLAG = 0, ALL COEFS WERE 0
1680 IF FLAG = 0 AND N(ROW,VARS +1) = 0 THEN 1760: REM WHOLE EQN IS ZERO
1690 IF FLAG = 0 AND N(ROW,VARS +1) < >0 THEN PRINT "ZERO";: REM X TERMS 0, CONST NON-ZERO
1700 REM HERE, FLAG<>0, SO HAVE NON-ZERO X TERM
1710 PRINT "=";
1720 PRINT N(ROW,VARS +1);
1730 REM DON'T PRINT "1" DENOMS:
1740 IF D(ROW,VARS +1) < >1 THEN PRINT "/";D(ROW,VARS +1);
1750 REM CLEAR TO END OF LINE:
1760 PRINT SPC( 40 - POS(0))
1770 FLAG = 0
1780 RETURN
1790 REM
1800 REM
1810 REM SUB TO MULT EQN BY CONST
1820 REM
1830 HOME
1840 PRINT "MULTIPLY WHICH EQUATION";: INPUT ROW
1850 PRINT
1860 PRINT "MULTIPLY BY WHAT?": GOSUB 830: REM FRAC GETTER
1870 REM SET UP FOR MULT SUBRTN
1880 N1 = NUM:D1 = DEN
1890 FOR COL = 1 TO VARS +1
1900 N2 = N(ROW,COL):D2 = D(ROW,COL)
1910 GOSUB 480: REM MULT SUBRTN
1920 N(ROW,COL) = N3:D(ROW,COL) = D3
1930 NEXT COL
1940 REM PRINT EQUATIONS
1950 GOSUB 2450
1960 RETURN
1970 REM
1980 REM
1990 REM
2000 REM SUB TO ADD EQUATIONS
2010 REM ADD EQN FST TO EQN SND
2020 REM PUT RESULT IN EQN SND
2030 REM
2040 PRINT "ADD EQUATION I TO EQUATION J": PRINT
2050 PRINT " I = ": INPUT FST: PRINT
2060 PRINT " J = ": INPUT SND: PRINT
2070 FOR COL = 1 TO VARS +1
2080 REM SET UP FOR ADD SUBRTN
2090 N1 = N(FST,COL):D1 = D(FST,COL)
2100 N2 = N(SND,COL):D2 = D(SND,COL)
2110 GOSUB 720: REM ADD SUBRTN
2120 N(SND,COL) = N3:D(SND,COL) = D3
2130 NEXT
2140 REM PRINT EQUATIONS:
2150 GOSUB 2450
2160 RETURN
2170 REM
2180 REM MENU SUBROUTINE
2190 REM
2200 HOME
2210 PRINT " THIS PROGRAM WORKS WITH LINEAR"
2220 PRINT : PRINT "EQUATIONS IN TWO VARIABLES."
2230 PRINT : PRINT " IT CAN:"
2240 PRINT : PRINT "MULTIPLY AN EQUATION BY A CONSTANT"
2250 PRINT : PRINT "AND ADD ONE EQUATION TO ANOTHER."
2260 PRINT : PRINT
2270 PRINT : PRINT "NUMBERS MAY BE ENTERED AS FRACTIONS X/Y"
2280 VTAB 20: PRINT "PRESS ANY KEY TO CONTINUE"
2290 GET ANS$
2300 HOME
2310 PRINT "ADD:TYPE A ","MULT:TYPE M"
2320 PRINT
2330 PRINT "STOP :TYPE S"
2340 PRINT
2350 POKE 34,4
2360 GOSUB 1070: REM GET EQUATIONS
2370 HOME
2380 PRINT "WHAT DO YOU WANT TO DO NOW";: INPUT DIR$
2390 IF DIR$ = "S" THEN POKE 34,0: PRINT : PRINT "SO LONG!": FOR I = 1 TO 1000: NEXT I: PRINT CHR$(4);"RUN MENU"
2400 IF DIR$ = "A" THEN GOSUB 1990: GOTO 2370
2410 IF DIR$ = "M" THEN GOSUB 1800: GOTO 2370
2420 PRINT : PRINT "I DON'T KNOW HOW TO ";DIR$: PRINT : GOTO 2380
2430 REM
2440 REM
2450 REM SUB TO PRINT ALL EQUATIONS
2460 REM
2470 POKE 34,4
2480 HOME
2490 FOR ROW = 1 TO EQNS
2500 GOSUB 1410
2510 NEXT
2520 POKE 34,6 +EQNS
2530 RETURN
2540 REM